package com.yss.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * version v1.0
 * 项目:WorkPlace
 * 包名:com.yss.proxy.dynamic
 * 功能描述:设计模式-动态代理：实现InvocationHandler的动态代理类
 * 作者:杨松松
 * 创建时间:2019/1/23 23:08
 */
public class DynamicProxy implements InvocationHandler {
    /**
     * 接受真实的代理对象变量
     */
    private Object image;

    /**
     * 构造方法
     *
     * @param image 真实的代理对象
     */
    public DynamicProxy(Object image) {
        this.image = image;
    }

    /**
     * @param proxy  我们所代理的真实对象
     * @param method 所代理的真实对象的某个方法method对象
     * @param args   调用真实对象的某个方法所需要的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 在代理真实对象前我们可以添加一些自己的操作
        System.out.print("before rent house");
        System.out.println("Method: " + method);

        // 当代理真实对象后的方法时，其实会自动跳转到代理关联的handler对象的invoke方法中
        method.invoke(image);

        // 代理真实对象后执行我们的操作
        System.out.print("after rent house");

        return null;
    }
}
